package club.terroir.server;

import java.util.ArrayList;
import java.util.List;

import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.KeyFactory;

import club.terroir.client.producteur.Contact;
import club.terroir.client.producteur.Utilisateur;
import club.terroir.client.produit.Folder;
import club.terroir.client.produit.IFolder;
import club.terroir.client.produit.Produit;
import club.terroir.server.contact.Contact_SS_;
import club.terroir.server.folder.Folder_SS;
import club.terroir.server.folder.Produit_SS;
import club.terroir.server.user.Utilisateur_SS;

public class UtilServerTerroir {

	public static Contact_SS_ toUtilisateur(Contact contact) {
		Contact_SS_ cSSu = new Contact_SS_();
		Key id = stringToKey(contact.getId());		
		cSSu.setKey(id);		
		
		cSSu.setName(contact.getName());
		cSSu.setFirstName(contact.getFirstName());
		cSSu.setPhoneNumber(contact.getTelephone());		
		cSSu.setEmail(contact.getEmail());
		cSSu.setAddress_1(contact.getAddress1());
		cSSu.setAddress_2(contact.getAddress2());
		cSSu.setVille(contact.getVille());
		cSSu.setCodePosstal(contact.getCodePostal());
		return cSSu;
	}

	public static Utilisateur toUtilisateur(Utilisateur_SS uSS) {
		Utilisateur user = new Utilisateur();
		user.setName(uSS.getName());
		user.setFirstName(uSS.getFirstName());
		user.setEmail(uSS.getEmail());
		user.setVille(uSS.getVille());
		return user;
	}

	public static List<Contact> toContacts(List<Contact_SS_> list) {
		List<Contact> list2 = new ArrayList<Contact>();
		for(Contact_SS_ c : list){
			Contact cc = toContact(c);
			list2.add(cc);
		}
		return list2;
	}
	
	public static Contact toContact(Contact_SS_ contact) {
		Contact cSSu = new Contact();
		Key k = contact.getKey();
		if(k != null){
			cSSu.setId(KeyFactory.keyToString(k));
		}
		cSSu.setName(contact.getName());
		cSSu.setFirstName(contact.getFirstName());
		cSSu.setTelephone(contact.getPhoneNumber());		
		cSSu.setEmail(contact.getEmail());
		cSSu.setAddress1(contact.getAddress_1());
		cSSu.setAddress2(contact.getAddress_2());
		cSSu.setVille(contact.getVille());
		cSSu.setCodePostal(contact.getCodePosstal());
		return cSSu;
	}

	public static Folder_SS toFolder_SS(Folder f) {
		Folder_SS f_ss = new Folder_SS();
		Key id = stringToKey(f.id);		
		f_ss.setKey(id);		
		f_ss.setName(f.getName());
		for(IFolder fChild : f.getChildreen()){
			if(fChild instanceof Folder){
				Folder fChildFolder =(Folder) fChild;
				f_ss.getListFolderChildreen().add(toFolder_SS(fChildFolder));
			}else if (fChild instanceof Produit){
				Produit childProduit = (Produit) fChild;
				Produit_SS pSS = toProduit_SS(childProduit);
				f_ss.getListProduitsChildreen().add(pSS);
			}
		}
		if(f.getParent() == null){
			f_ss.setRoot(true);
		}
		return f_ss;
	}

	public static Produit_SS toProduit_SS(Produit p) {
		Produit_SS p_ss = new Produit_SS();
		String id = p.id;			
		p_ss.setKey(stringToKey(id));
		p_ss.setName(p.name);
		return p_ss;
	}
		
	public static Key stringToKey(String id){
		if (id == null){
			return null;
		}
		if(id.equals("")){
			return null;
		}
		return KeyFactory.stringToKey(id);
	}

	public static Folder toFolder_SS(Folder_SS f_ss) {
		Folder f = new Folder();
		Key k = f_ss.getKey();
		if(k != null){
			f.id = KeyFactory.keyToString(k);
		}
		f.setName(f_ss.getName());
		for(Folder_SS fSSChild : f_ss.getListFolderChildreen() ){
			Folder fChild = toFolder_SS(fSSChild);
			fChild.setParent(f);
			f.getChildreen().add(fChild);
		}
		for(Produit_SS pSS : f_ss.getListProduitsChildreen()){
			Produit p = toProduit(pSS);
			p.parent =f;
			f.getChildreen().add(p);
		}
		return f;
	}

	private static Produit toProduit(Produit_SS pSS) {
		Produit p = new Produit();
		Key k  = pSS.getKey();
		if (k != null){
			p.id = KeyFactory.keyToString(k);
		}		
		p.name = pSS.getName();
		return p;
	}

}
